From ec7200797edd93bbb5d397f82206dbaf4126025f Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 25 Jun 2014 23:17:26 -0400 Subject: [PATCH] GtkFrame: Use style classes for shadow Use the FLAT style class when shadow is set to none, and let the theme render the appropriate border. https://bugzilla.gnome.org/show_bug.cgi?id=732256 --- gtk/gtkframe.c | 68 +++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/gtk/gtkframe.c b/gtk/gtkframe.c index bd38263ea3..7bb0d18968 100644 --- a/gtk/gtkframe.c +++ b/gtk/gtkframe.c @@ -597,6 +597,7 @@ gtk_frame_set_shadow_type (GtkFrame *frame, { GtkFramePrivate *priv; GtkWidget *widget; + GtkStyleContext *context; g_return_if_fail (GTK_IS_FRAME (frame)); @@ -607,6 +608,12 @@ gtk_frame_set_shadow_type (GtkFrame *frame, widget = GTK_WIDGET (frame); priv->shadow_type = type; + context = gtk_widget_get_style_context (GTK_WIDGET (frame)); + if (type == GTK_SHADOW_NONE) + gtk_style_context_add_class (context, GTK_STYLE_CLASS_FLAT); + else + gtk_style_context_remove_class (context, GTK_STYLE_CLASS_FLAT); + if (gtk_widget_is_drawable (widget)) gtk_widget_queue_draw (widget); @@ -679,46 +686,39 @@ gtk_frame_draw (GtkWidget *widget, width = priv->child_allocation.width + padding.left + padding.right; height = priv->child_allocation.height + padding.top + padding.bottom; - if (priv->shadow_type != GTK_SHADOW_NONE) + if (priv->label_widget) { - if (priv->label_widget) - { - gfloat xalign; - gint height_extra; - gint x2; - - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR) - xalign = priv->label_xalign; - else - xalign = 1 - priv->label_xalign; - - height_extra = MAX (0, priv->label_allocation.height - padding.top) - - priv->label_yalign * priv->label_allocation.height; - y -= height_extra; - height += height_extra; - - x2 = padding.left + (priv->child_allocation.width - priv->label_allocation.width - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD) * xalign + LABEL_SIDE_PAD; - - gtk_render_background (context, cr, x, y, width, height); - - /* If the label is completely over or under the frame we can omit the gap */ - if (priv->label_yalign == 0.0 || priv->label_yalign == 1.0) - gtk_render_frame (context, cr, x, y, width, height); - else - gtk_render_frame_gap (context, cr, - x, y, width, height, - GTK_POS_TOP, x2, - x2 + priv->label_allocation.width + 2 * LABEL_PAD); - } + gfloat xalign; + gint height_extra; + gint x2; + + if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR) + xalign = priv->label_xalign; else - { - gtk_render_background (context, cr, x, y, width, height); - gtk_render_frame (context, cr, x, y, width, height); - } + xalign = 1 - priv->label_xalign; + + height_extra = MAX (0, priv->label_allocation.height - padding.top) + - priv->label_yalign * priv->label_allocation.height; + y -= height_extra; + height += height_extra; + + x2 = padding.left + (priv->child_allocation.width - priv->label_allocation.width - 2 * LABEL_PAD - 2 * LABEL_SIDE_PAD) * xalign + LABEL_SIDE_PAD; + + gtk_render_background (context, cr, x, y, width, height); + + /* If the label is completely over or under the frame we can omit the gap */ + if (priv->label_yalign == 0.0 || priv->label_yalign == 1.0) + gtk_render_frame (context, cr, x, y, width, height); + else + gtk_render_frame_gap (context, cr, + x, y, width, height, + GTK_POS_TOP, x2, + x2 + priv->label_allocation.width + 2 * LABEL_PAD); } else { gtk_render_background (context, cr, x, y, width, height); + gtk_render_frame (context, cr, x, y, width, height); } GTK_WIDGET_CLASS (gtk_frame_parent_class)->draw (widget, cr); -- 2.30.2